﻿@page
@using System.Globalization
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Http.Extensions
@using Microsoft.Extensions.Options
@using Volo.Abp.Users
@using Volo.Blogging
@using Volo.Blogging.Areas.Blog.Helpers.TagHelpers
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Prismjs
@using Volo.Blogging.SocialMedia
@inject IAuthorizationService Authorization
@inject IOptionsSnapshot<BloggingTwitterOptions> twitterOptions
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.AspNetCore.Mvc.TagHelpers
@using Volo.Blogging.Localization
@using Volo.Blogging.Pages.Blogs
@using Volo.Blogging.Pages.Blogs.Posts
@inject IHtmlLocalizer<BloggingResource> L
@inject BloggingPageHelper BloggingPageHelper
@inject ICurrentUser CurrentUser
@model Volo.Blogging.Pages.Blogs.Posts.DetailModel
@{
    ViewBag.Title = Model.Post.Title;
    ViewBag.Description = Model.Post.Description;

    ViewBag.TwitterCard = "summary_large_image";
    ViewBag.TwitterSite = string.IsNullOrWhiteSpace(twitterOptions.Value.Site) ? "" : twitterOptions.Value.Site;
    ViewBag.TwitterTitle = Model.Post.Title;
    ViewBag.TwitterDescription = Model.Post.Description;
    ViewBag.TwitterImage = $"{Request.Scheme}://{Request.Host}{Request.PathBase}{Model.Post.CoverImage}";

    ViewBag.LinkedInUrl = Request.GetEncodedUrl();
    ViewBag.LinkedInTitle = Model.Post.Title;
    ViewBag.LinkedInDescription = Model.Post.Description;
    ViewBag.LinkedInImage = $"{Request.Scheme}://{Request.Host}{Request.PathBase}{Model.Post.CoverImage}";

    var hasCommentingPermission = CurrentUser.IsAuthenticated; //TODO: Apply real policy!
}
@section scripts {
    <abp-script-bundle name="@typeof(DetailModel).FullName">
        <abp-script src="/client-proxies/blogging-proxy.js" />
        <abp-script type="@typeof(PrismjsScriptBundleContributor)"/>
        <abp-script src="/Pages/Blogs/Posts/detail.js"/>
    </abp-script-bundle>
}
@section styles {
    <abp-style-bundle name="@typeof(DetailModel).FullName">
        <abp-script type="@typeof(PrismjsStyleBundleContributor)" />
        <abp-style src="/Pages/Blogs/Shared/Styles/blog.css" />
        <abp-style src="/Pages/Blogs/Posts/detail.css" />
    </abp-style-bundle>
}

<div class="vs-blog vs-blog-detail">
<abp-input asp-for="FocusCommentId" class="m-0"/>
<div class="container-xl">
<div class="row">
    <div class="col-12 col-md-8 col-lg-8 mx-auto">
        <section class="hero-section">
            <div class="hero-articles">
                <div class="hero-content">
                    <h1 class="mb-3" id="PostTitle">@Model.Post.Title</h1>
                    <div class="article-owner">
                        <div class="article-infos">
                            <div class="user-card mt-3 mb-4">
                                <div class="row">
                                    <div class="col-auto pe-1">
                                        @if (Model.Post.Writer != null)
                                        {
                                            <a href="@Url.Page("/Blogs/Members/Index", new {userName = Model.Post.Writer.UserName})" aria-label="Go to user profile">
                                                <img gravatar-email="@Model.Post.Writer.Email" default-image="Identicon" class="article-avatar" alt="User Avatar"/>
                                            </a>
                                        }
                                    </div>
                                    <div class="col ps-1">
                                        @if (Model.Post.Writer != null)
                                        {
                                            <h5 class="mt-2 mb-1">
                                                <a href="@Url.Page("/Blogs/Members/Index", new {userName = Model.Post.Writer.UserName})">
                                                    @(Model.Post.Writer.UserName)
                                                </a>
                                                <span>@BloggingPageHelper.GetLocalizedTimeAgoText(Model.Post.CreationTime)</span>
                                            </h5>
                                        }

                                        <i class="fa fa-eye"></i> @L["WiewsWithCount", @Model.Post.ReadCount]
                                        <span class="vs-seperator">|</span>
                                        <i class="fa fa-comment"></i> @L["CommentWithCount", @Model.CommentCount]


                                        @if (await Authorization.IsGrantedAsync(BloggingPermissions.Posts.Update))
                                        {
                                            <span class="seperator">|</span>
                                            <a asp-page="./Edit" asp-route-postId="@Model.Post.Id" asp-route-blogShortName="@Model.BlogShortName">
                                                <i class="fa fa-pencil"></i> @L["Edit"]
                                            </a>
                                        }
                                        @if (await Authorization.IsGrantedAsync(BloggingPermissions.Posts.Delete) || (CurrentUser.Id.HasValue && CurrentUser.Id == Model.Post.CreatorId))
                                        {
                                            <span class="seperator">|</span>
                                            <a href="#" id="DeletePostLink" data-postid="@Model.Post.Id" data-blogShortName="@Model.BlogShortName">
                                                <i class="fa fa-trash"></i> @L["Delete"]
                                            </a>
                                        }
                                        <div class="float-end">
                                            <a href="#" target="_blank" class="me-2" id="TwitterShareLink" title="Twitter">
                                                <i class="fa fa-twitter fa-lg"></i>
                                            </a>
                                            <a href="#" target="_blank" class="me-2" id="LinkedinShareLink" title="LinkedIn">
                                                <i class="fa fa-linkedin fa-lg"></i>
                                            </a>
                                            <a href="#" target="_blank" class="me-2" id="FacebookShareLink" title="Facebook">
                                                <i class="fa fa-facebook fa-lg"></i>
                                            </a>
                                            <a href="#" target="_blank" class="me-2" id="EmailShareLink" title="E-mail">
                                                <i class="fa fa-envelope-square fa-lg"></i>
                                            </a>
                                            <button class="copy-link me-2" id="CopyLink" title="CopyLink">
                                                <i class="fa fa-link fa-lg"></i>
                                            </button>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="img-container mb-3">
                    <img src="@Model.Post.CoverImage" alt="Cover Image"/>
                </div>
            </div>
        </section>
        <section class="post-content">
            <p>
                @Html.Raw(BloggingPageHelper.RenderMarkdownToHtml(Model.Post.Content))
            </p>
        </section>
    </div>
    <div class="col-12 col-md-4 col-lg-3">
        <div class="list-group">
            <div class="col-auto pe-2">
                @if (Model.Post.Writer != null)
                {
                    <a href="@Url.Page("/Blogs/Members/Index", new {userName = Model.Post.Writer.UserName})" aria-label="Go to user profile">
                        <img gravatar-email="@Model.Post.Writer.Email" default-image="Identicon" class="article-avatar rounded-circle" alt="User Avatar"/>
                    </a>
                }
            </div>
            <div class="col ps-1">
                @if (Model.Post.Writer != null)
                {
                    <h5 class="mt-2 mb-1">

                        <a href="@Url.Page("/Blogs/Members/Index", new {userName = Model.Post.Writer.UserName})">
                            @if (Model.Post.Writer.Name != null && Model.Post.Writer.Surname != null)
                            {
                                <p class="fw-bold pt-2 fs-5">@Model.Post.Writer.Name @Model.Post.Writer.Surname</p>
                            }
                            else
                            {
                                <p class="fw-bold pt-2 fs-5">@Model.Post.Writer.UserName</p>
                            }
                        </a>
                    </h5>
                    <div class="position-relative">
                        @if (Model.Post.Writer.JobTitle != null)
                        {
                            <p class="fw-lighter">@Model.Post.Writer.JobTitle</p>
                        }
                    </div>
                }
                
                @if (CurrentUser.Id.HasValue && CurrentUser.Id.Value == Model.Post.Writer?.Id)
                {
                    <a class="fw-lighter" href="@(Url.Page("/Blogs/Members/Index", new {userName = Model.Post.Writer.UserName}))#edit-profile">@L["EditProfile"] <i class="fas fa-edit"></i></a>
                }
            </div>
            @if (Model.LatestPosts.Count > 1)
            {
                <hr/>
                <p class="fs-3 fw-bold text-dark">@L["MoreFromBlog"]</p>
                @for (var index = 0; index < Model.LatestPosts.Count && index < 5; index++)
                {
                    if (Model.LatestPosts[index].Id != Model.Post.Id)
                    {
                        var post = Model.LatestPosts[index];

                        <section class="box-articles p-0">
                            <div class="row  align-middle">
                                <div class="article-owner">
                                    <div class="article-infos">
                                        <div class="user-card pt-3">
                                            @if (post.Writer != null)
                                            {
                                                <div class="row">
                                                    <div class="col-auto pe-1">
                                                        <a href="@Url.Page("/Blogs/Members/Index", new {userName = post.Writer.UserName})" aria-label="Go to user profile">
                                                            <img gravatar-email="@post.Writer.Email" default-image="Identicon" class="last-post-image" alt="User Avatar"/>
                                                        </a>
                                                    </div>
                                                    
                                                    <div class="col">
                                                        <h5 class="last-post-name">
                                                            <a href="@Url.Page("/Blogs/Members/Index", new {userName = post.Writer.UserName})">
                                                                @(post.Writer!.UserName)
                                                            </a>
                                                        </h5>
                                                    </div>
                                                </div>
                                            }
                                        </div>
                                    </div>
                                    <div class="col mt-2">
                                        <p>
                                            <a class="last-post-title" asp-page="./Detail" asp-route-postUrl="@post.Url">@post.Title</a>
                                        </p>
                                    </div>
                                </div>
                            </div>
                        </section>
                    }
                }
            }
        </div>
    </div>
</div>

<div class="row">
<div class="col-12 col-md-8 col-lg-8 mx-auto">
@if (Model.Post.Tags.Count > 0)
{
    <div class="tags">
        <h5>@L["TagsInThisArticle"]</h5>
        @foreach (var tag in Model.Post.Tags)
        {
            <a asp-page="/Blogs/Posts/Index" asp-route-blogShortName="@Model.BlogShortName" asp-route-tagName="@tag.Name" class="tag">@tag.Name</a>
        }
    </div>
}

@if (Model.CommentsWithReplies.Count > 0)
{
    <abp-row v-align="Start">
        <abp-column size-sm="_12">
            <p class="float-start"><i class="fa fa-comment"></i> @L["CommentWithCount", @Model.CommentCount]</p>
            @if (hasCommentingPermission)
            {
                <a abp-button="Primary" class="btn-rounded float-end active" href="#LeaveComment">@L["LeaveComment"]</a>
            }
            else
            {
                <a abp-button="Primary" class="btn-rounded float-end active" href="/Account/Login?returnUrl=@System.Web.HttpUtility.UrlEncode(@Request.Path)">@L["LeaveComment"]</a>
            }
        </abp-column>
    </abp-row>

    <div class="comment-area">
        @foreach (var commentWithRepliesDto in Model.CommentsWithReplies)
        {
            <div class="media">
                <img gravatar-email="@commentWithRepliesDto.Comment.Writer.Email" default-image="Identicon" class="d-flex me-3 rounded-circle comment-avatar" alt="User Avatar"/>
                <div class="media-body">
                    <h5 class="comment-owner">
                        @(commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName)
                        <span>@BloggingPageHelper.GetLocalizedTimeAgoText(commentWithRepliesDto.Comment.CreationTime)</span>
                    </h5>
                    <p id="@commentWithRepliesDto.Comment.Id">
                        @commentWithRepliesDto.Comment.Text
                    </p>
                    <div class="comment-buttons">

                        @if (hasCommentingPermission)
                        {
                            <a href="#" class="tag replyLink" data-relpyid="@commentWithRepliesDto.Comment.Id">
                                <i class="fa fa-reply" aria-hidden="true"></i> @L["Reply"]
                            </a>
                        }

                        @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Delete) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId))
                        {
                            <span class="seperator">|</span>
                            <a href="#" class="tag deleteLink" data-deleteid="@commentWithRepliesDto.Comment.Id">
                                <i class="fa fa-trash" aria-hidden="true"></i> @L["Delete"]
                            </a>
                        }

                        @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId))
                        {
                            <span class="seperator">|</span>
                            <a href="#" class="tag updateLink" data-updateid="@commentWithRepliesDto.Comment.Id">
                                <i class="fa fa-pencil" aria-hidden="true"></i> @L["Edit"]
                            </a>
                        }
                    </div>

                    @if (hasCommentingPermission)
                    {
                        <div class="comment-form mt-4 replyForm">
                            <div class="clearfix p-4">
                                <h3 class="mt-0">
                                    @L["ReplyTo", commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName]

                                </h3>
                                <div>
                                    <form method="post">
                                        <input name="postId" value="@Model.Post.Id" type="hidden"/>
                                        <input name="repliedCommentId" value="@commentWithRepliesDto.Comment.Id" hidden/>

                                        <div class="mb-3">
                                            <textarea class="form-control" name="text" id="textBoxId" rows="4"></textarea>
                                        </div>
                                        <abp-button button-type="Primary" class="btn-rounded float-end" type="submit" text="@L["Comment"].Value"/>
                                        <abp-button button-type="Danger" class="btn-rounded float-end replyCancelButton" text="@L["Cancel"].Value"/>
                                    </form>
                                </div>
                            </div>
                        </div>
                    }
                    @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId))
                    {
                        <div class="comment-form mt-4 editForm">
                            <div class="clearfix p-4">
                                <div>
                                    <form class="editFormClass">
                                        <input name="commentId" value="@commentWithRepliesDto.Comment.Id" hidden/>
                                        <input name="concurrencyStamp" value="@commentWithRepliesDto.Comment.ConcurrencyStamp" hidden/>
                                        <div class="mb-3">
                                            <textarea class="form-control" name="text" id="textBoxId" rows="4">@commentWithRepliesDto.Comment.Text</textarea>
                                        </div>
                                        <abp-button button-type="Primary" class="btn-rounded float-end" type="submit" text="@L["Submit"].Value"/>
                                        <abp-button button-type="Danger" class="btn-rounded float-end editCancelButton" text="@L["Cancel"].Value"/>
                                    </form>
                                </div>
                            </div>
                        </div>
                    }

                    @foreach (var reply in commentWithRepliesDto.Replies)
                    {
                        <div class="media">
                            <img gravatar-email="@reply.Writer.Email" default-image="Identicon" class="d-flex me-3 rounded-circle comment-avatar" alt="User Avatar"/>
                            <div class="media-body">
                                <h5 class="comment-owner">
                                    @(reply.Writer == null ? "" : reply.Writer.UserName)
                                    <span>@BloggingPageHelper.GetLocalizedTimeAgoText(reply.CreationTime)</span>
                                </h5>
                                <p id="@reply.Id">
                                    @reply.Text
                                </p>
                                <div class="comment-buttons">

                                    @if (hasCommentingPermission)
                                    {
                                        <a href="#" class="tag replyLink" data-relpyid="@commentWithRepliesDto.Comment.Id">
                                            <i class="fa fa-reply" aria-hidden="true"></i> @L["Reply"]
                                        </a>
                                    }
                                    @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Delete) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId))
                                    {
                                        <span class="seperator">|</span>
                                        <a href="#" class="tag deleteLink" data-deleteid="@reply.Id">
                                            <i class="fa fa-trash" aria-hidden="true"></i> @L["Delete"]
                                        </a>
                                    }

                                    @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId))
                                    {
                                        <span class="seperator">|</span>
                                        <a href="#" class="tag updateLink" data-updateid="@reply.Id">
                                            <i class="fa fa-pencil" aria-hidden="true"></i> @L["Edit"]
                                        </a>
                                    }
                                </div>

                                @if (hasCommentingPermission)
                                {
                                    <div class="comment-form mt-4 replyForm">
                                        <div class="clearfix bg-light py-4">
                                            <h3 class="mt-0">
                                                @L["ReplyTo", commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName]
                                            </h3>
                                            <div>
                                                <form method="post">
                                                    <input name="postId" value="@Model.Post.Id" hidden/>
                                                    <input name="repliedCommentId" value="@commentWithRepliesDto.Comment.Id" hidden/>
                                                    <div class="mb-3">
                                                        <textarea class="form-control" name="text" id="textBoxId" rows="4"></textarea>
                                                    </div>
                                                    <abp-button button-type="Primary" class="btn-rounded float-end" type="submit" text="@L["Submit"].Value"/>
                                                    <abp-button button-type="Danger" class="btn-rounded float-end replyCancelButton" text="@L["Cancel"].Value"/>
                                                </form>
                                            </div>
                                        </div>
                                    </div>
                                }
                                @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId))
                                {
                                    <div class="comment-form mt-4 editForm">
                                        <div class="clearfix bg-light py-4">
                                            <div>
                                                <form class="editFormClass">
                                                    <input name="commentId" value="@reply.Id" hidden/>
                                                    <div class="mb-3">
                                                        <textarea class="form-control" name="text" id="textBoxId" rows="4">@reply.Text</textarea>
                                                    </div>
                                                    <abp-button button-type="Primary" class="btn-rounded float-end" type="submit" text="@L["Submit"].Value"/>
                                                    <abp-button button-type="Danger" class="btn-rounded float-end editCancelButton" text="@L["Cancel"].Value"/>
                                                </form>
                                            </div>
                                        </div>
                                    </div>
                                }
                            </div>
                        </div>
                    }
                </div>
            </div>
        }
    </div>
}

@if (hasCommentingPermission)
{
    <div class="comment-form mt-4" id="LeaveComment">
        <div class="vs-blog-title mb-0">
            <h3>@L["LeaveComment"]</h3>
        </div>
        <div class="clearfix bg-light py-4">
            <div>
                <form method="post">
                    <input name="postId" value="@Model.Post.Id" hidden/>
                    <input name="repliedCommentId" id="repliedCommentId" hidden/>
                    <div class="mb-3">
                        <textarea class="form-control" name="text" id="textBoxId" rows="4"></textarea>
                    </div>
                    <abp-button button-type="Primary" class="btn-rounded float-end" type="submit" text="@L["Submit"].Value"/>
                </form>
            </div>
        </div>
    </div>
}
else
{
    <a abp-button="Primary" class="btn-rounded float-end active" href="/Account/Login?returnUrl=@System.Web.HttpUtility.UrlEncode(@Request.Path)">@L["LeaveComment"]</a>
}
<div class="hero articles">
    <div class="hero content">
        @if (Model.PostsList.Count > 1)
        {
            var userName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Model.Post.Writer.UserName);
            <p class="fs-3 fw-bold text-dark">@L["MoreFromUser", userName]</p>
            for (var index = 0; index < Model.PostsList.Count; index++)
            {
                if (Model.PostsList[index].Id != Model.Post.Id)
                {
                    var post = Model.PostsList[index];
                    <div class="post-item">
                        <div class="post-type-cont">
                            <a href="@Url.Page("/Blogs/Members/Index", new {userName = Model.Post.Writer.UserName})" class="text-decoration-none">
                                <img gravatar-email="@Model.Post.Writer.Email" default-image="Identicon" class="post-member-img rounded-circle d-block"/>
                            </a>                           
                        </div>
                        <div class="post-detail-cont">
                            <div class="post-info fs-12 mb-2">
                                <a href="@Url.Page("/Blogs/Members/Index", new {userName = Model.Post.Writer.UserName})" class="text-decoration-none">
                                    <span class="text-dark dot">@Model.Post.Writer.UserName</span>
                                </a>
                                <span class="text-dark-200">@post.CreationTime.ToString("MMMM yyyy")</span>
                            </div>
                            <h2 class="post-title mt-2">
                                <a asp-page="./Detail" asp-route-postUrl="@post.Url">
                                    @post.Title
                                </a>
                            </h2>
                            <p class="post-desc">
                                <a asp-page="./Detail" asp-route-postUrl="@post.Url">
                                    @post.Description.TruncateWithPostfix(150)
                                </a>
                                <a asp-page="./Detail" asp-route-postUrl="@post.Url" class="readMore">@L["ReadMore"]</a>
                            </p>
                        </div>
                        <div class="post-img-cont">
                            <div class="post-list-span text-center post">
                                <img src="@post.CoverImage" class="box-articles">
                            </div>
                        </div>
                    </div>
                }
            }
        }
    </div>
</div>
</div>
<div class="col-12 col-md-4 col-lg-3">
        
    </div>
</div>
</div>
</div>
<p id="BlogFullName" name="@Model.Blog.Name" hidden></p>
